package main

import (
	"fmt"
	"sync"
	"time"
)

func calc(w *sync.WaitGroup ,i int) {
	defer w.Done()
	fmt.Println("calc:", i)
	time.Sleep(time.Second)
}

func main() {
	// 另一种定义wg的方法，函数里一般用短变量声明
	// 这次不是全局变量了，下面还要传参
	wg := sync.WaitGroup{}
	wg.Add(10)  // 一次加10，不在for循环里每次加1了
	for i := 0; i < 10; i++ {
		go calc(&wg, i)  // 结构体是值类型，用地址来传参
	}
	wg.Wait()
	fmt.Println("All goroutine Done")
}